﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Data;
using System.IO;
using System.Xml;
using System.Collections;
using System.Windows.Forms;



namespace MultilangXML
{
    public class LanguageSetup
    {
        //public Form frmName { get; set; }

        //public Language SetLanguage { get; set; }

        //enum Language
        //{
            
        //}

        //enum CheckHasChild
        //{
        //    haschild     = true,
        //    nothaschild  = false
        //}

        ///// <summary>
        ///// 此方法用于 Form 中所有控件显示多语言切换
        ///// </summary>
        //public void SetControlLanguageText()
        //{
        //    ReadDefaultLanguage();

        //    ReadHashTable(ReadResource(frmName.Name));
        //}

        ///// <summary>
        ///// 读取默认语言
        ///// </summary>
        ///// <returns></returns>
        //public Language ReadDefaultLanguage()
        //{
        //    string LanguageXML = languageXmlDirectory("LanguageDefine.xml");

        //    XmlReader reader = new XmlTextReader(LanguageXML);
        //    XmlDocument doc = new XmlDocument();
        //    doc.Load(reader);
        //    XmlNode root = doc.DocumentElement;

        //    //选取DefaultLangugae节点
        //    XmlNode node = root.SelectSingleNode("DefaultLanguage");

        //    string result = Enum.GetName(typeof(Language), SetLanguage);

        //    if (node != null)
        //    {
        //        //取出节点中的内容
        //        result = node.InnerText;
        //    }
        //    reader.Close();

        //    return (Language)Enum.Parse(typeof(Language), result);

        //}

        ///// <summary>
        ///// 读取多语言的资源文件
        ///// </summary>
        ///// <param name="frmName">窗体的Name</param>
        ///// <param name="lang">要显示的语言(如ZH或EN)</param>
        ///// <returns></returns>
        //private List<Hashtable> ReadResource(string frmName)
        //{
        //    Hashtable result = new Hashtable();

        //    Hashtable resultChild = new Hashtable();

        //    XmlReader reader = null;

        //    string workingDirectory = GetSolutionDirectory();
        //    string strlanguageXml = workingDirectory + "\\ShowScanner\\LanguageXML\\AppResource_" + Enum.GetName(typeof(Language), SetLanguage) + ".xml";

        //    FileInfo fi = new FileInfo(strlanguageXml);
        //    if (!fi.Exists)
        //    {
        //        string languageXML = languageXmlDirectory("AppResource.xml");
        //        reader = new XmlTextReader(languageXML);
        //    }
        //    else
        //    {
        //        reader = new XmlTextReader(strlanguageXml);
        //    }

        //    XmlDocument doc = new XmlDocument();
        //    doc.Load(reader);

        //    XmlNode root = doc.DocumentElement;
        //    XmlNodeList nodelist = root.SelectNodes("Form[Name='" + frmName + "']/Controls/Control");
        //    foreach (XmlNode node in nodelist)
        //    {
        //        try
        //        {
        //            XmlNode node1;
        //            XmlNode node2;
        //            XmlNode node3;

        //            node1 = node.SelectSingleNode("@name");
        //            node2 = node.SelectSingleNode("@text");


        //            if (node1 != null)
        //            {
        //                //type是判断是否为子控件，作为一个标识
        //                if (node.SelectSingleNode("@type") != null)
        //                {
        //                    node3 = node.SelectSingleNode("@type");

        //                    XmlNodeList xmlNodeList = root.SelectNodes("Form/Controls/Control/c_Control");

        //                    foreach (XmlNode xmlNode in xmlNodeList)
        //                    {
        //                        node1 = xmlNode.SelectSingleNode("@name");
        //                        node2 = xmlNode.SelectSingleNode("@text");

        //                        if (node1 != null)
        //                        {
        //                            resultChild.Add(node1.InnerText.ToLower(), node2.InnerText);
        //                            //result.Add(node1.InnerText.ToLower(), node2.InnerText);
        //                        }
        //                    }

        //                    result.Add(node3.Value, "");
        //                }
        //                else
        //                {
        //                    result.Add(node1.InnerText.ToLower(), node2.InnerText);
        //                }
        //            }
        //        }
        //        catch (FormatException fe)
        //        {
        //            throw new Exception(fe.Message);
        //        }
        //    }
        //    reader.Close();

        //    List<Hashtable> hashtableList = new List<Hashtable>();

        //    hashtableList.Add(result);

        //    hashtableList.Add(resultChild);

        //    return hashtableList;
        //    // ReadHashTable(result, resultChild);
        //}

        ///// <summary>
        ///// 取得指定的XML文件路径
        ///// </summary>
        ///// <param name="strXML">.XML文件名</param>
        ///// <returns></returns>
        //public string languageXmlDirectory(string strXML)
        //{
        //    string workingDirectory = GetSolutionDirectory();
        //    string languageXml = workingDirectory + "\\ShowScanner\\LanguageXML\\" + strXML;

        //    return languageXml;
        //}


        ///// <summary>
        ///// 修改默认语言
        ///// </summary>
        ///// <param name="lang">需要修改默认语言</param>
        //public void WriteDefaultLanguage(Language lang)
        //{
        //    string languageXml = languageXmlDirectory("LanguageDefine.xml");

        //    DataSet ds = new DataSet();
        //    ds.ReadXml(languageXml);
        //    DataTable dt = ds.Tables["Language"];

        //    dt.Rows[0]["DefaultLanguage"] = lang;
        //    ds.AcceptChanges();

        //    //写入XML
        //    ds.WriteXml(languageXml);
        //}


        //#region XML多语言处理 读取资源文件

        ///// <summary>
        ///// 读取HashTable资源
        ///// </summary>
        ///// <param name="tableList"></param>
        //private void ReadHashTable(List<Hashtable> tableList)
        //{
        //    Hashtable table = tableList[0];
        //    Hashtable tableChild = tableList[1];

        //    Control[] control;

        //    foreach (DictionaryEntry de in table)
        //    {
        //        if (de.Key.ToString().ToLower() == frmName.Name.ToLower())
        //        {
        //            //Form头的显示
        //            frmName.Text = de.Value.ToString();
        //        }

        //        //递归实现该方法最佳，此处暂时不用
        //        //判断是否为子控件 所在的集合

        //        if (de.Key.ToString().ToLower() == Enum.GetName(typeof(CheckHasChild), CheckHasChild.haschild))
        //        {
        //            foreach (Control ctr in this.frmName.Controls)
        //            {
        //                if (ctr.GetType() == typeof(System.Windows.Forms.MenuStrip))
        //                {
        //                    MenuStrip menu = (MenuStrip)ctr;

        //                    foreach (ToolStripMenuItem menuItem in menu.Items)
        //                    {
        //                        foreach (DictionaryEntry deChild in tableChild)
        //                        {
        //                            ToolStripItem[] menuList = menu.Items.Find((string)deChild.Key, true);

        //                            if (menuList.Length > 0)
        //                            {
        //                                menuList[0].Text = deChild.Value.ToString();
        //                            }
        //                        }
        //                    }
        //                }

        //                //if (ctr.GetType() == typeof(System.Windows.Forms.Panel))
        //                //{
        //                //    Panel panel = (Panel)ctr;

        //                //    foreach (Control controls in panel.Controls)
        //                //    {
        //                //        foreach (DictionaryEntry deChild in tableChild)
        //                //        {
        //                //            Control[] col = panel.Controls.Find((string)deChild.Key, true);

        //                //            if (col.Length > 0)
        //                //            { 

        //                //            }
        //                //        }
        //                //    }
        //                //}
        //            }
        //        }
        //        else
        //        {
        //            control = this.frmName.Controls.Find((string)de.Key, true);

        //            if (control.Length > 0)
        //            {
        //                //为所控件Text赋值
        //                control[0].Text = de.Value.ToString();
        //            }

        //        }
        //    }
        //}

        //#endregion

        //#region
        //private void GetControl(Control.ControlCollection ctc, ref int checkNull)
        //{
        //    foreach (Control ct in ctc)
        //    {
        //        if (ct is TextBox)
        //        {
        //            if (ct.Text.Length <= 0)
        //            {
        //                checkNull = 1;
        //            }
        //        }
        //        if (ct.HasChildren)
        //        {
        //            GetControl(ct.Controls, ref checkNull);
        //        }
        //    }
        //}
        //#endregion


        //#region

        ///// <summary>
        ///// 窗体显示的提示信息（多语言）
        ///// </summary>
        ///// <param name="ShowType">MessageShowType ShowType</param>
        ///// <returns></returns>
        //public string MessageBoxShow(MessageShowType MessageType)
        //{

        //    string strMessage = string.Empty;

        //    string workingDirectory = GetSolutionDirectory();
        //    string strLanguageXml = workingDirectory + "\\ShowScanner\\LanguageXML\\ShowLanguage_" + Enum.GetName(typeof(Language), SetLanguage) + ".xml";

        //    //读取对应的 XML文件
        //    FileInfo file = new FileInfo(strLanguageXml);

        //    if (file.Exists)
        //    {
        //        XmlReader reader = new XmlTextReader(strLanguageXml);

        //        XmlDocument doc = new XmlDocument();

        //        doc.Load(reader);

        //        XmlNode root = doc.DocumentElement;

        //        XmlNodeList nodeList = root.SelectNodes("" + MessageType + "");

        //        foreach (XmlNode node in nodeList)
        //        {
        //            strMessage = node.InnerText;
        //        }
        //    }

        //    //返回XML文件读取的值
        //    return strMessage;
        //}

        //#endregion

        //public string GetSolutionDirectory()
        //{
        //    string workingDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

        //    int index = workingDirectory.LastIndexOf('\\');

        //    workingDirectory = workingDirectory.Substring(0, index);

        //    index = workingDirectory.LastIndexOf('\\');

        //    workingDirectory = workingDirectory.Substring(0, index);

        //    index = workingDirectory.LastIndexOf('\\');

        //    workingDirectory = workingDirectory.Substring(0, index);

        //    return workingDirectory;
        //}
    }

}
